---
title: Upgrading to Spree 5.2
description: This guide covers upgrading a Spree 5.1 application to Spree 5.2.
---

<Info>
  Before proceeding to upgrade, please ensure you're at [Spree 5.1](/developer/upgrades/5.0-to-5.1)
</Info>

## Upgrade steps

### Update gems

  ```bash
  bundle update
  ```

### Install `propshaft` gem

Spree 5.2 does not rely on `sprockets` gem anymore. You can either add `sprockets` to your `Gemfile` or move to `propshaft` gem (recommended).

Propshaft is the new default asset pipeline for Rails 7+ applications. It's more performant and has better support for modern browsers.

Please run the following command to install `propshaft` gem:

  ```bash
  bundle add propshaft
  ```

### Install and run missing migrations

```bash
bin/rake spree:install:migrations && bin/rails db:migrate
```

### Migrate to Metafields or keep using Product Properties

Spree 5.2 introduces [Metafields](/developer/core-concepts/metafields), which are a new way to store additional information about an object. Previously, we used Product Properties to enrich products. Metafields are more powerful, more flexible and can be attached to any object not just products.

However we now that properties were available in Spree since it's beginning. So we decided to keep them for backward compatibility until Spree 6.0 to give you time to migrate to metafields.

To keep using Product Properties, you will need to set a configuration flag in your `config/initializers/spree.rb` file:

  ```bash
  Spree.config do |config|
    config.product_properties_enabled = true
  end
  ```

You can still use metafields, along side properties.

To migrate to metafields, you will need to run the following command:

  ```bash
  bin/rake db:migrate_product_properties_to_metafields
  ```

This will migrate your current data to the new format.

Remember that you will need to update your API calls to fetch metafields instead of properties, eg.

  ```curl
  curl --request GET \
        --url 'https://demo.spreecommerce.org/api/v2/storefront/products/1?include=metafields' \
        --header 'Accept: application/vnd.api+json'
  ```

### Migrate Product Details pages to PDP 2.0 with blocks and metafields

Spree 5.2 greatly enhances the product details page management in page builder with block support and metafields. To ensure your existing product details pages are migrated to the new system, run the following command:

  ```bash
  bin/rake db:migrate_product_details_pages
  ```

This works great with our default storefront theme. If you're using a custom theme, you will need to adjust your templates.

### Migrate store policies

Spree 5.2 introduces more flexible way to manage store policies (eg. terms of service, privacy policy, returns policy, shipping policy).

Previously they were just attributes (rich text fields) on the Store model. Now they are stored in the new Policy model.

To migrate to the new system, you will need to run the following command:

  ```bash
  bin/rake db:migrate_policies
  ```

This will migrate your current data to the new format. 

<Warning>
  If you're using a custom theme, you will need to adjust [app/views/spree/checkout/_footer.html.erb](https://github.com/spree/spree/blob/main/storefront/app/views/spree/checkout/_footer.html.erb) template to be able to manage checkout footer links which was also expanded (now you can link to Pages, Policies, URLs and more).

  `current_store.policies` won't work anymore, you will need to use `current_store.links` instead.
</Warning>

### Update Storefront to Tailwind v4 or stay on v3

Spree 5.2 introduces Tailwind v4 support for the Storefront. Tailwind v4 is a major upgrade from Tailwind v3.

#### Option A: Update to Tailwind v4

Running `bundle update` previously installed Tailwind v4. You only need to run

  ```bash
  bin/rails g spree:storefront:install
  ```

This will:

1. Overwrite `config/tailwind.config.js` file with the new Tailwind v4 configuration.
2. Add `app/assets/tailwind/application.css` file with the new Tailwind v4 styles. If you modified `app/assets/stylesheets/application.tailwind.css` file, you will need to merge your changes with the new one.

#### Option B: Stay on Tailwind v3

You can stay on Tailwind v3 by running the following command:

Add these line to your `Gemfile`:

  ```ruby
  gem "tailwindcss-rails", "~> 3.3.1" # which transitively pins tailwindcss-ruby to v3
  ```

and run:

  ```bash
  bundle update tailwindcss-rails
  ```

This will install Tailwind v3 instead of Tailwind v4.
